local mengxiangchuandi = fk.CreateSkill {
  name = "mengxiangchuandi",
}

-- 加载技能的翻译表，用于显示技能的名称、描述等信息
Fk:loadTranslationTable{
  -- 技能的名称
  ["mengxiangchuandi"] = "梦想传递",
  -- 技能的详细描述
  [":mengxiangchuandi"] = "出牌阶段限一次，你可以选择一名梦之队势力角色，若其有未发动过的觉醒技你选择其中一项技能，"..
  "视为该角色满足其觉醒条件；否则其摸两张牌。",
  -- 技能的简略描述
  ["#mengxiangchuandi"] = "梦想传递：令一名梦之队角色的觉醒技视为满足条件（若其没有觉醒技则摸两张牌）",
  ["@mengxiangchuandi"] = "梦想传递",

}

-- 为技能添加一个主动效果
mengxiangchuandi:addEffect("active", {
  -- 动画类型为支援
  anim_type = "support",
  -- 技能使用时的提示信息
  prompt = "#mengxiangchuandi",
  -- 使用技能时需要消耗的卡牌数量为 0
  card_num = 0,
  -- 使用技能时需要选择的目标数量为 1
  target_num = 1,
  -- 判断技能是否可以使用的函数
  can_use = function(self, player)
    -- 检查玩家在整个游戏历史中使用该技能的次数是否为 0
    return player:usedSkillTimes(mengxiangchuandi.name, Player.HistoryPhase) == 0
  end,
  -- 卡牌过滤函数，这里返回 false 表示不需要卡牌
  card_filter = Util.FalseFunc,
  -- 目标过滤函数，这里返回 true 表示可以选择任意目标
  target_filter = function(self, player, to_select, selected)
    return to_select.kingdom == "dream"
  end,
  on_use = function(self, room, effect)
    -- 获取使用技能的玩家
    local player = effect.from
    -- 获取技能目标玩家
    local target = effect.tos[1]
    -- 用于存储可选择的觉醒技列表
    local choices = {}
    -- 过滤目标玩家的技能列表，找出未发动过的觉醒技
    choices = table.filter(target:getSkillNameList(), function(s)
        -- 检查技能是否为觉醒技且目标玩家未发动过该技能
        return Fk.skills[s]:hasTag(Skill.Wake) and target:usedSkillTimes(s, Player.HistoryGame) == 0
    end)
        -- 如果有可选择的觉醒技
    if #choices > 0 then
      -- 让使用技能的玩家从可选择的觉醒技中进行选择
      local choice = room:askToChoice(player, {
        choices = choices,
        skill_name = mengxiangchuandi.name,
        prompt = "#mengxiangchuandi-choice::"..target.id,
      })
      -- 为目标玩家添加标记，表示该觉醒技视为满足条件
      room:addTableMarkIfNeed(target, "@mengxiangchuandi", choice)
      room:addTableMarkIfNeed(target, MarkEnum.StraightToWake, choice)
    else
      -- 如果没有可选择的觉醒技，目标玩家摸四张牌
      target:drawCards(2, mengxiangchuandi.name)
    end
  end,
})

-- 为技能添加另一个效果，使用 fk.SkillEffect
mengxiangchuandi:addEffect(fk.SkillEffect, {
  -- 判断是否可以刷新的函数
  can_refresh = function(self, event, target, player, data)
    -- 检查目标是否为玩家本人，数据中的技能是否为觉醒技，且玩家的标记中包含该技能名称
    return target == player and data.skill:hasTag(Skill.Wake) and
      table.contains(player:getTableMark("@mengxiangchuandi"), data.skill.name)
  end,
  -- 刷新时的处理函数
  on_refresh = function(self, event, target, player, data)
    -- 获取玩家所在的房间
    local room = player.room
    -- 移除玩家的相关标记
    room:removeTableMark(player, "@mengxiangchuandi", data.skill.name)
    room:removeTableMark(player, MarkEnum.StraightToWake, data.skill.name)
  end,
})

-- 返回创建的技能
return mengxiangchuandi